package com.quectel.business.common.device;

import com.quectel.util.common.JacksonUtils;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * 个性化字段约束类
 */
public class DeviceExtraAttrCls {

    /**
     * 根据设备类型编码，将个性化属性jsonStr转化为obj，自行强转
     * eg
     * DeviceSpecialParams.xxx xObj
     * = (DeviceSpecialParams.xxx)DeviceSpecialParams.parseExtStr(categoryCode, extJsonStr);
     *
     * @param code
     * @param jsonStr
     * @return
     */
    public static Object parseExtStr(String code, String jsonStr) {
        if (StringUtils.isBlank(code) || StringUtils.isBlank(jsonStr)) {
            return null;
        }

        Class<?>[] declaredClasses = DeviceExtraAttrCls.class.getDeclaredClasses();
        for (Class<?> declaredClass : declaredClasses) {
            if (declaredClass.getSimpleName().toLowerCase().endsWith(code.toLowerCase())) {
                return JacksonUtils.parse(jsonStr, declaredClass);
            }
        }
        return null;
    }

    /**
     * 根据class直接转化
     *
     * @param tClass
     * @param jsonStr
     * @param <T>
     * @return
     */
    public static <T extends BaseAttr> T parseExtStr(Class<T> tClass, String jsonStr) {
        if (StringUtils.isBlank(jsonStr)) {
            return null;
        }
        return JacksonUtils.parse(jsonStr, tClass);
    }

    public interface BaseAttr {
    }


    /**
     * 智慧道闸
     */
    @Data
    public static class AttrOfIntelligentParkingGate implements BaseAttr {
        /**
         * 出口/入口  0未知 1进 2出
         */
        private Byte outOrIn;
    }

    /**
     * 智慧门禁
     */
    @Data
    public static class AttrOfIntelligentEntranceGuard implements BaseAttr {
        /**
         * 出口/入口  0未知 1进 2出
         */
        private Byte outOrIn;
    }

    /**
     * /**
     * 视频监控
     */
    @Data
    public static class AttrOfIntelligentMonitor implements BaseAttr {
        /**
         * 流地址
         */
        private String streamUrl;

        /**
         * 管理端ip
         */
        private String managerIp;

        /**
         * 管理端账号
         */
        private String managerUserName;

        /**
         * 管理端密码
         */
        private String managerPassword;
    }


}
